package algoritmos;

import java.util.ArrayList;

abstract class Algoritmo {
	protected ArrayList<Integer> frame = new ArrayList<Integer>();
	protected final int MAX_FRAME;
	protected ArrayList<Integer> requisicao = new ArrayList<Integer>();
	protected int numErro;

	protected abstract void acerto(int acerto);

	protected abstract void substitui(int novo, int indiceAtualDaRequisicao);

	public Algoritmo(ArrayList<Integer> requisicao, int MAX_FRAME) {
		this.requisicao = requisicao;
		this.MAX_FRAME = MAX_FRAME;
	}

	protected void algoritmo() {
		int i = 0;
		for (int valor : requisicao) {
			if (existeNaMemoriaReal(valor)) {
				acerto(valor);
			} else {
				substitui(valor, i++);
				numErro++;
			}
		}
	}

	boolean existeNaMemoriaReal(int valor) {
		return frame.indexOf(valor) != -1;
	}

	public void showResults() {
		algoritmo();
		System.out.println(getClass().getName());
		System.out.println("Acertos:");
		System.out.println(requisicao.size() - numErro);
		System.out.println("Erros:");
		System.out.println(numErro);
		System.out.println();
	}
}